package fr.afcepf.atod18.restaurants.web;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;

import fr.afcepf.atod18.restaurants.entity.Restaurateur;
import fr.afcepf.atod18.utilitaires.entity.Adresse;
import fr.afcepf.atod18.utilitaires.entity.InfoSession;
import fr.afcepf.atod18.utilitaires.entity.Login;
import fr.afcepf.atod18.utilitaires.entity.Profil;
import fr.afcepf.atod18.utilitaires.entity.Rue;
import fr.afcepf.atod18.utilitaires.entity.TypeAdresse;
import fr.afcepf.atod18.utilitaires.entity.Ville;
import fr.afcepf.atod18.utilitaires.service.IServiceFacade;
import fr.afcepf.atod18.utilitaires.web.ConnexionMB;

@ManagedBean(name="restaurateurMB")
@SessionScoped
public class RestaurateurMB {
    @ManagedProperty(value = "#{serviceFacade}")
    IServiceFacade serviceFacade;
    @ManagedProperty(value = "#{connexionMB}")
    ConnexionMB connexionMB;
    
    private InfoSession infoSession;
    
    private Restaurateur restaurateur;
    private Login login;
    private String password;
    private String messagepwd;
    private String messagecpt;
    private Adresse adresse;
    private Rue rue;
    private Integer numeroRue;
    private Ville ville;
    private Integer codePostal;
    private boolean isCreation;
    private TypeAdresse ta;
    
	
	/**
	 * @return the messagecpt
	 */
	public String getMessagecpt() {
		return messagecpt;
	}
	/**
	 * @param messagecpt the messagecpt to set
	 */
	public void setMessagecpt(String messagecpt) {
		this.messagecpt = messagecpt;
	}
	/**
	 * @return the infoSession
	 */
	public InfoSession getInfoSession() {
		return infoSession;
	}
	/**
	 * @param infoSession the infoSession to set
	 */
	public void setInfoSession(InfoSession infoSession) {
		this.infoSession = infoSession;
	}
		
    /**
	 * @return the login
	 */
	public Login getLogin() {
		return login;
	}
	/**
	 * @param login the login to set
	 */
	public void setLogin(Login login) {
		this.login = login;
	}
	
	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}
	/**
	 * @param password the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * @return the isCreation
	 */
	public boolean isCreation() {
		return isCreation;
	}
	/**
	 * @param isCreation the isCreation to set
	 */
	public void setCreation(boolean isCreation) {
		this.isCreation = isCreation;
	}
	
	/**
	 * @return the serviceFacade
	 */
	public IServiceFacade getServiceFacade() {
		return serviceFacade;
	}
	/**
	 * @param serviceFacade the serviceFacade to set
	 */
	public void setServiceFacade(IServiceFacade serviceFacade) {
		this.serviceFacade = serviceFacade;
	}
	
	/**
	 * @return the connexionMB
	 */
	public ConnexionMB getConnexionMB() {
		return connexionMB;
	}
	/**
	 * @param connexionMB the connexionMB to set
	 */
	public void setConnexionMB(ConnexionMB connexionMB) {
		this.connexionMB = connexionMB;
	}
	/**
	 * @return the adresse
	 */
	public Adresse getAdresse() {
		return adresse;
	}
	/**
	 * @param adresse the adresse to set
	 */
	public void setAdresse(Adresse adresse) {
		this.adresse = adresse;
	}
	
	/**
	 * @return the ville
	 */
	public Ville getVille() {
		return ville;
	}
	/**
	 * @param ville the ville to set
	 */
	public void setVille(Ville ville) {
		this.ville = ville;
	}
	
	/**
	 * @return the rue
	 */
	public Rue getRue() {
		return rue;
	}
	/**
	 * @param rue the rue to set
	 */
	public void setRue(Rue rue) {
		this.rue = rue;
	}
	
	/**
	 * @return the messagepwd
	 */
	public String getMessagepwd() {
		return messagepwd;
	}
	
	/**
	 * @return the numeroRue
	 */
	public Integer getNumeroRue() {
		return numeroRue;
	}
	/**
	 * @param numeroRue the numeroRue to set
	 */
	public void setNumeroRue(Integer numeroRue) {
		this.numeroRue = numeroRue;
	}
	/**
	 * @return the codePostal
	 */
	public Integer getCodePostal() {
		return codePostal;
	}
	/**
	 * @param codePostal the codePostal to set
	 */
	public void setCodePostal(Integer codePostal) {
		this.codePostal = codePostal;
	}
	/**
	 * @param messagepwd the messagepwd to set
	 */
	public void setMessagepwd(String messagepwd) {
		this.messagepwd = messagepwd;
	}
	

	/**
	 * @return the ta
	 */
	public TypeAdresse getTa() {
		return ta;
	}
	/**
	 * @param ta the ta to set
	 */
	public void setTa(TypeAdresse ta) {
		this.ta = ta;
	}


	/**
	 * @return the restaurateur
	 */
	public Restaurateur getRestaurateur() {
		return restaurateur;
	}
	/**
	 * @param restaurateur the restaurateur to set
	 */
	public void setRestaurateur(Restaurateur restaurateur) {
		this.restaurateur = restaurateur;
	}
	public void doChargeRestaurateur(ComponentSystemEvent event){
	    ta = serviceFacade.getServiceTypeAdresse().rechercherParNom("libelle", "Courrier").get(0); 
		infoSession = connexionMB.getInfoSession();
		System.out.println(infoSession.getLogin());
		List<Login> logins = serviceFacade.getServiceLogin().rechercherParNom("email", infoSession.getLogin());
		if (!(logins == null || logins.size() == 0)) {
			System.out.println("chargement restaurateur");
			System.out.println(logins.get(0).getEmail());
			restaurateur = new Restaurateur();
			Set<Adresse> sa = new HashSet<Adresse>();
			adresse = new Adresse();
        	ville = new Ville();
        	rue = new Rue();
        	
        	System.out.println(logins.get(0).toString());
        	restaurateur = logins.get(0).getRestaurateur();
        
        	Restaurateur utilisateur = serviceFacade.getServiceRestaurateur().rechercherParId(restaurateur.getId());
        	sa = utilisateur.getAdresses();
        	System.out.println("restaurateur trouvé");
        	
        	System.out.println(sa.size());
        	List<Adresse> listAdresses = new ArrayList<Adresse>(sa);
        	System.out.println(listAdresses.size());
        	for (int i = 0; i < listAdresses.size(); i++){
        		if (listAdresses.get(i).getTa().getId()== ta.getId()){
        			adresse = listAdresses.get(i);
        			numeroRue = adresse.getNumeroRue();
        			rue = adresse.getRue();
        			ville = adresse.getVille();
        			codePostal = ville.getCodePostal();
        		}
        	}
	        
		}
	}
	

	public String doMaj(){
		
		ville.setCodePostal(codePostal);
		adresse.setNumeroRue(numeroRue);
		
		serviceFacade.getServiceVille().mettreAJour(ville);
		serviceFacade.getServiceRue().mettreAJour(rue);
		serviceFacade.getServiceAdresse().mettreAJour(adresse);
		serviceFacade.getServiceRestaurateur().mettreAJour(restaurateur);
		
		String page = null;
		if (infoSession.getPageCourante().equals("")){
			page = "AccueilRestaurateur.jsf";
		}
		else {
			page=infoSession.getPageCourante()+"Restaurateur.jsf";
		}
		return page;
	}
}
